package com.joker.demo.core.constant;

/**
 * 任务状态常量类
 * 定义任务状态相关的常量值
 *
 * @author : feixiang.li
 * @since : 2025-01-27 10:00
 */
public class JobStatusConstants {

    /**
     * 任务状态常量
     */
    public static final class Status {
        /**
         * 就绪状态 - 任务有可用的执行器，可以正常执行
         */
        public static final int READY = 1;

        /**
         * 异常状态 - 任务没有可用的执行器，无法正常执行
         */
        public static final int EXCEPTION = 2;

        /**
         * 停止状态 - 任务被手动停止，暂停执行
         */
        public static final int STOP = 3;

        /**
         * 暂停状态 - 任务被暂停，暂时不执行
         */
        public static final int PAUSED = 4;

        /**
         * 禁用状态 - 任务被禁用，不参与调度
         */
        public static final int DISABLED = 5;

        /**
         * 维护状态 - 任务处于维护中，暂时不可用
         */
        public static final int MAINTENANCE = 6;
    }

    /**
     * 任务状态描述常量
     */
    public static final class StatusDesc {
        /**
         * 就绪状态描述
         */
        public static final String READY = "就绪";

        /**
         * 异常状态描述
         */
        public static final String EXCEPTION = "异常";

        /**
         * 停止状态描述
         */
        public static final String STOP = "停止";

        /**
         * 暂停状态描述
         */
        public static final String PAUSED = "暂停";

        /**
         * 禁用状态描述
         */
        public static final String DISABLED = "禁用";

        /**
         * 维护状态描述
         */
        public static final String MAINTENANCE = "维护中";
    }

    /**
     * 任务状态分组常量
     */
    public static final class StatusGroup {
        /**
         * 可执行状态组 - 只有READY状态的任务才能正常执行
         */
        public static final int[] EXECUTABLE = {Status.READY};

        /**
         * 异常状态组 - EXCEPTION状态表示任务无法正常执行
         */
        public static final int[] EXCEPTION = {Status.EXCEPTION};

        /**
         * 停止状态组 - 这些状态都属于停止状态
         */
        public static final int[] STOPPED = {Status.STOP, Status.PAUSED, Status.DISABLED, Status.MAINTENANCE};

        /**
         * 活跃状态组 - 这些状态都属于活跃状态（参与调度）
         */
        public static final int[] ACTIVE = {Status.READY, Status.EXCEPTION};

        /**
         * 非活跃状态组 - 这些状态都属于非活跃状态（不参与调度）
         */
        public static final int[] INACTIVE = {Status.STOP, Status.PAUSED, Status.DISABLED, Status.MAINTENANCE};
    }

    /**
     * 私有构造函数，防止实例化
     */
    private JobStatusConstants() {
        throw new UnsupportedOperationException("常量类不能实例化");
    }
}
